<?php
class SignInForm extends Form
{
	function SignInForm()
	{
		Form::Form('SignIn');
        $this->link_css("style/admin-sign-form.css");
        $this->link_css("style/front-login-register.css");

        $this->link_css("style/style-rfc.css");
        $this->link_js("javascript/jquery.tinycarousel.js");
        $this->link_js("javascript/rfc-script.js");
        
		if(!$_POST)
		{
			$lostpass 	= (int)Url::get('lostpass');
			
			if($lostpass)//Khôi phục mật khẩu
			{
				$user_id 			= $_REQUEST["user_id"];
				$validate_key 		= $_REQUEST["validate_key"];
				
				$msg = "";
				
				if($user_id)
				{
					$result 		= DB::query("SELECT id, email, verify_code FROM user WHERE id = $user_id");
					$count_results 	= mysql_num_rows($result);
			
					if ($count_results > 0)
					{
						$row = mysql_fetch_assoc($result);	
						
						if($row['verify_code'] == $validate_key)
						{		
							$new_password 	=  ECLib::generatePassword(5);	
							$email 			= $row['email'];
							
							$msg_body = "Xin chào bạn,<br><br>
							Chúng tôi nhận được yêu cầu reset lại mật khẩu đăng nhập website <a href=".WEB_ROOT.">".WEB_NAME."</a>
							Thông tin về tài khoản của bạn như sau:<br><br>
							ID của bạn: $user_id<br>
							Email đăng nhập: $email<br>
							Password: $new_password<br><br>
							Ngay sau khi đăng nhập, bạn vui lòng đổi lại mật khẩu để đảm bảo cho sự an toàn.<br><br>				
							".WEB_NAME;
									
							$send = System::sendECEmail($email,'Lay lai mat khau truy cap '.WEB_NAME,$msg_body);		
							
							if($send)
							{
								$sql	=	"UPDATE user SET verify_code = '',  password = '" . User::encode_password($new_password)."' WHERE id = {$row['id']}";
								$res 	= 	DB::query($sql);
								
								if($res)
								{
									$msg = "Mật khẩu mới đã được gửi tới $email. Bạn vui lòng kiểm trang Email ($email) của bạn để lấy lại mật khẩu đăng nhập.";
									$this->setFormSucces('user_email_this',$msg);
									return;
								}
								else 
								{
									$msg = "Không cập nhật được hệ thống, mời bạn thử lại!";
								}
							}
							else
							{
								$msg = "Hệ thống chưa gửi được email, mời bạn thử lại!";
							}
						}
						else
						{
								$msg = "Thông tin xác nhận không chính xác hoặc đã quá hạn!";				
						}
					}
					else
					{
						//$msg = writeHeadLine("Có lỗi xảy ra","red");
						$msg = "User này không tồn tại";
					}
				}
				else
				{
					$msg = "Địa chỉ Email của bạn chứa các ký tự không hợp lệ.";
				}
				
				$this->setFormError('user_email_this',$msg);	
			}
		}
		elseif (isset($_POST['username'], $_POST['password']))
		{
			$this->on_submit($_POST['username'], $_POST['password'], @$_POST['chkAutoLogin']);
		}
	}
	
	function on_submit($user_email = '', $user_pass = '', $chkAutoLogin = 0)
	{
		if(User::checkLock4Ever(1))
		{
			Url::redirect_current();
		}
		
		$submit = Url::get('submit');
		
		if($submit == 'Đăng nhập' || $user_email != '' || $user_pass != '')//Đăng nhập
		{
			if($user_email != '' && $user_pass != '')//Đăng nhập
			{
				$user_email_this 	= $user_email;
				$password_this 		= $user_pass;
				$set_cookie_this 	= $chkAutoLogin;
			}
			else
			{
				$user_email_this 	= Url::getParam('user_email_this');
				$password_this 		= Url::get('password_this');
				$set_cookie_this 	= Url::getParamInt('set_cookie_this',0);
			}
			//$this->checkFormInput('Email / Số mobile','user_email_this',$user_email_this,'email',true,'',false,50);	
			$this->checkFormInput('Email','user_email_this',$user_email_this,'str',true,'',false,50);	
			$this->checkFormInput('Mật khẩu','password_this',$password_this,'str',true,'',3,50);	
			
			if(!$this->errNum)
			{
				$user_data = DB::fetch("SELECT id, email, password, is_active, block_time FROM user WHERE email='$user_email_this'");
				
				if(!USER_ACTIVE_ON  && $user_data && $user_data['is_active'])
				{
					DB::query("UPDATE user SET is_active=1 WHERE id=".$user_data['id']);
					DB::delete('user_active','id='.$user_data['id']);
					
					User::getUser($user_data['id'],1);
				}
				
				if($user_data && $user_data['password'] == User::encode_password($password_this))
				{
					if(USER_ACTIVE_ON && $user_data['is_active']==2)//Chưa kích hoạt
					{
						$this->setFormError('user_email_this',"Bạn chưa kích hoạt tài khoản!<br /><br />Bạn hãy check lại mail để kích hoạt lại tài khoản<br />
						hoặc <a href='reg_success.html&cmd=active'>click vào đây</a> để hệ thống gửi lại email kích hoạt!");	
					}
					else
					{
						$alert='';
						$href = base64_decode(Url::get('href'));
						
						/*if(!$href){
							$href=Url::build('home');
						}
						*/
						if($user_data['block_time']==-1)
						{
							$this->setFormError('user_email_this',"Tài khoản hoặc mật khẩu không đúng!");	
						}
						elseif($user_data['block_time'] > TIME_NOW)
						{
							$user_lock = DB::select('user_lock','user_id='.$user_data['id']);
							
							if($user_lock)
							{
								if($user_lock['type']==1)//Khoá vĩnh viễn
								{
									User::LogOut();
									
									DB::delete(_SESS_TABLE,'user_id='.$user_id,__LINE__.__FILE__);
									Url::access_denied();
								}		
								elseif($user_lock['type'] == 3)//Khoá vĩnh viễn + cookie
								{
									User::lock4Ever(true,$user_data['id']);
									Url::access_denied();
								}
								else
								{
									if($user_lock['note'])
									{
										$user_lock['note']='\nLý do: '.str_replace(array('"',"'"),'',$user_lock['note']);
									}
									
									$alert = '<script>
												alert("Tài khoản của bạn đang tạm khoá tới '.date('h:i, d/m/Y',$user_data['block_time']).'!'.$user_lock['note'].'");
												window.location="'.WEB_DIR.'";
											</script>';
									//$this->setFormError('user_email_this',"Tài khoản của bạn đang tạm khoá tới ".date('d/m/Y H:i',$user_data['block_time'])."!".$user_lock['note']);		
								}
							}
							
							$_SESSION['user_lock']=true;
						}
						
						if($set_cookie_this == 1)
						{
							$year = 60 * 60 * 24 * 365 + TIME_NOW; 
							
							ECLib::my_setcookie("ecore_id", $user_data['id'], $year);
							ECLib::my_setcookie("password", $user_data['password'], $year);
						}
		
						$_SESSION['is_load_page_first'] = 1;// dung jQueryUI de load bang thong bao						
						
						User::LogIn($user_data['id']);
						
						if(isset($_SESSION['user_lock']) && $_SESSION['user_lock'])
						{
							echo $alert;
							exit;
						}
						elseif($href)
						{
							Url::redirect_url($href);
						}
						
						if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']){
							$referer = $_SERVER['HTTP_REFERER'];
						}
						else{
							$referer = $_SERVER['REQUEST_URI'];
						}
						
						header("Location: $referer");
						exit;
					}
				}
				else 
				{
					$this->setFormError('user_email_this',"Tài khoản hoặc mật khẩu không đúng!");
				}
			}
		}
		elseif($submit == 'Gửi')//Quên mật khẩu
		{
			$email 	= trim(Url::get("email_forgot"));
			$msg 	= '';
					
			if($email)
			{
		        $string_pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/";

		        if(preg_match($string_pattern,$email)) // validate email
		        {
		            $result 		= DB::query("SELECT id, email FROM user WHERE email = '$email'");
				    $count_results 	= mysql_num_rows($result);
		            
				    if($count_results >0 )
				    {
		                $row 			= mysql_fetch_assoc($result);
		                $validate_key 	= User::encode_password( ECLib::generatePassword(5) . TIME_NOW );
		
		                $url_validate = WEB_ROOT . "sign_in.html?lostpass=1&user_id={$row['id']}&validate_key=$validate_key";
		
		                $msg_body = "Xin chào bạn,<br><br>
			                Chúng tôi nhận được yêu cầu reset lại mật khẩu đăng nhập website <a href=".WEB_ROOT.">".WEB_NAME."</a>.
			                Hệ thống sẽ tự động tạo lại mật khẩu mới và gửi tới email {$row['email']} nếu bạn click vào link sau:<br><br>
		                <a href=\"$url_validate\" target=\"_blank\">$url_validate</a><br><br>
		                ( Bạn có thể copy và paste link sau và chạy trên trình duyệt: $url_validate )<br><br>
		
		                ".WEB_NAME;
		
		                $send = System::sendECEmail($email,'Lay lai mat khau truy cap '.WEB_NAME,$msg_body);
		
		                if($send)
		                {
		                    $sql	= 	"UPDATE user SET verify_code = '$validate_key' WHERE email = '$email'";
		                    $res 	=  	DB::query($sql);
		                   
		                    if($res)
		                    {
		                        $msg = $msg . "Một Email đã được gửi đến <b>$email</b>. Vui lòng kiểm tra email và làm theo hướng dẫn.";
		                        
		                        $this->setFormSucces("", $msg);
		                        return;
		                    }
		                    else
		                    {
		                        //$msg = writeHeadLine("CÓ LỖI XẢY RA","red");
		                        $msg = $msg . "Không cập nhật được hệ thống, mời bạn thử lại!";
		                    }
		                }
		                else
		                {
		                    //$msg = writeHeadLine("CÓ LỖI XẢY RA","red");
		                    $msg = $msg . ECLib::formatString("Hệ thống chưa gửi được email, mời bạn thử lại!",array("<b>$email</b>"));
		                }
		            }
		            else
		            {
		                //$msg = writeHeadLine("Cảnh báo","red");
		                $msg = $msg . ECLib::formatString("Không tìm thấy tài khoản nào với địa chỉ Email  %1%.",array("<b>$email</b>"));
		            }
		        }
		        else
		        {
		            $msg = "Địa chỉ email $email của bạn không đúng.";
		        }
			}
			else
			{
				$msg = $msg . "Bạn chưa nhập địa chỉ email.";
			}
			
			$this->setFormError("email_forgot", $msg);
		}
	}

	function draw()
	{
		global $display;

        /*if(isset($_POST["submit_from_home"])){
            echo"<script language='javascript'>
                $(function(){
                    $('.button-signin').click();
                });
            </script>";
        }*/

        $lostpass 	= (int)Url::get('lostpass');
		
		if($lostpass)
		{
			$display->add('msg',			$this->showFormErrorMessages(1));
			$display->add('msg3',			$this->showFormSuccesMessages(1));
		}
		else
		{
			$submit = Url::get('submit');
		
			if($submit == 'Đăng nhập')//Đăng nhập
			{
				$display->add('msg',			$this->showFormErrorMessages(1));
			}
			elseif($submit == 'Gửi')//Quên mk
			{
				$display->add('msg1',			$this->showFormErrorMessages(1));
				$display->add('msg2',			$this->showFormSuccesMessages(1));
			}
		}
		
		$display->add('form_block_id',	Module::$block_id);
			
		$display->add('user_email_this',	Url::getParam('user_email_this'));				
		$display->add('password_this',		Url::getParam('password_this'));				
		
		$display->output('sign_in');
	}
}
?>